A snapshot can be created to capture a state of a database at a particular point in time. A full snapshot of a system may be composed of large amounts of data (e.g., terabytes, petabytes, etc.). Performing a full snapshot of a database at frequent intervals (e.g., hourly, daily) requires large amounts of storage to store the snapshots. To reduce the amount of storage required, an incremental snapshot of the database may be performed between full snapshots. An incremental snapshot includes the changes that have occurred to the system since the previous (full or incremental) snapshot. However, restoring a database using a full snapshot and several incremental snapshots may require large amounts of storage and consume large amounts of computational resources and time to perform.
For example, suppose a full snapshot of a database comprised of 1 TB of data was performed at t=0 and an incremental snapshot of 100 GB of data was performed at each t, from t=1 to t=10. Some of the data from an incremental snapshot may overwrite the data from the full snapshot and/or a previous incremental snapshot. However, to recover a database at t=10 requires starting from the full snapshot at t=0 and applying changes captured at each incremental snapshot to the system until the combined snapshots reproduce the state of the database at t=10.
Although the above process reduces the amount of storage required to store the backup data as compared to continually capturing full snapshots, it increases the amount of computational resources and time needed to recover the data. It would be useful to not only minimize the amount of storage required to store the data, but also to reduce the amount of computational resources and time needed to recover data.